package com.gph.saviorframework.wf.service;

import org.activiti.bpmn.model.*;
import org.activiti.bpmn.model.Process;

import java.util.Collection;

/**
 * Bpmn模型操作接口
 * @author guopeihui
 */
public interface ActivitiBpmnModelService {

    /**
     * 根据流程编号获取bpmn模型,可以用作动态的操作节点
     * @param defId
     * @return
     */
    BpmnModel getBpmnModelByDefId(String defId);

    /**
     * 获取某流程定义中所有的流程元素
     * @param defId
     * @return
     */
    Collection<FlowElement> getFlowElements(String defId);

    /****以下接口对element的操作****/
    void addUserTask(org.activiti.bpmn.model.Process process,UserTask userTask);

    /**
     * 在两个元素之间添加连接线
     * @param process
     * @param sourceElementId
     * @param targetElementId
     */
    void addSequenceFlow(org.activiti.bpmn.model.Process process,
                         String sourceElementId,String targetElementId);

    /**
     * 创建用户任务，目前仅支持确定的分配人
     * @param id
     * @param name
     * @param assignee
     */
    UserTask createUserTask(String id, String name, String assignee);

    /**
     * 动态的添加任务节点（类似pre->newTask->next）
     * @param process 流程
     * @param newTask 新节点
     * @param preElement 新节点的上级节点
     * @param nextElement 新节点的下级节点
     */
    void addUserTask(Process process,UserTask newTask,FlowElement preElement,FlowElement nextElement);
}
